package sv.com.renacempleo.dao.red;

import java.util.List;
import java.util.Vector;

import org.apache.commons.lang.StringUtils;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import sv.com.renacempleo.dao.BaseDaoImpl;
import sv.com.renacempleo.dto.red.RedEmpresas;
import sv.com.renacempleo.exception.WebException;
import sv.com.renacempleo.web.security.CustomUser;
import sv.com.renacempleo.web.util.WebUtilidades;

public class RedEmpresasDaoImpl extends BaseDaoImpl implements RedEmpresasDao{

	@SuppressWarnings("unchecked")
	@Override
	public List<Object[]> findAllActivesAsArray() throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(RedEmpresas.class);
		criteria.addOrder(Order.asc("redEmpresaFolio"));
		criteria.add(Restrictions.eq("redEmpresaEstado", "1"));
		criteria.setProjection(Projections.projectionList().
			add(Projections.property("redEmpresaFolio")).
			add(Projections.property("redEmpresaNombreComercial"))
		);		
		return (List<Object[]>) findByCriteria(criteria);
	}

	@Override
	public List<Object[]> findAllInactivesAsArray() throws WebException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Object[]> findAllAsArray() throws WebException {
		// TODO Auto-generated method stub\
		return null;
	}

	@Override
	public List<Object[]> findEmpresaByOficina(Long ctgOficinaId)
			throws WebException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Object[]> findEmpresaByAgente(Long ctgEmpleadoId)
			throws WebException {
		// TODO Auto-generated method stub
		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Object[]> findEmpresaByNit(String redEmpresaNit)
			throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(RedEmpresas.class);
		criteria.add(Restrictions.eq("redEmpresaNit", redEmpresaNit));
		return (List<Object[]>) findByCriteria(criteria);
	}

	@Override
	public List<Object[]> findEmpresaByRegistro(String redEmpresaRegistro)
			throws WebException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Object[]> findEmpresaByFolio(Long redEmpresaFolio)
			throws WebException {
		// TODO Auto-generated method stub
		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Object[]> findEmpresaByCriterios(int opcion, String estado,
			String nombreComercial,CustomUser cu, Long redEmpresaFolio) throws WebException {
		Vector<Object> parameters = new Vector<Object>();
		String sqlQuery = WebUtilidades.getQueryByName("redEmpresas.findEmpresas");
		String where = "";
		switch (opcion) {
			case 1: //EMPRESAS REGISTRADAS POR EL USUARIO
				where += " SGD_USU_ID = ?";
				parameters.add(cu.getSgdUsuarioId());
				break;
			case 2: //EMPRESAS REGISTRADAS A LA OFICINA QUE PERTENECE EL USUARIO
				where += "CTG_OFI_ID = ?";
				parameters.add(cu.getCtgOficinaId());
				break;
			default:
				break;
			
		}
		if(StringUtils.isNotBlank(nombreComercial)){
			where += " AND RED_EMP_NOMBRE_COMERCIAL LIKE ? ";
			parameters.add("%"+nombreComercial+"%");
		}
		if(!"".equals(estado)) {
			where += " AND RED_EMP_ESTADO = ?";
			parameters.add(estado);
		}
		
		sqlQuery = StringUtils.replace(sqlQuery, "{WHERE}", StringUtils.isNotBlank(where) ? (" where " + where) : "");
		try {
			return (List<Object[]>) findBySQLQuery(sqlQuery, parameters.toArray());
		} catch (Exception e) {
			throw new WebException("Problemas al ejecutar la busqueda de empresas");
		}
	}

}
